<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    /**
     * 在 JavaScript 中，== 和 === 都是用于比较两个值是否相等的运算符，但它们之间存在一些区别：

        == 比较：它是松散相等比较，会在比较之前进行类型转换。如果比较的两个值类型不同，JavaScript 会尝试将它们转换为相同的类型，然后再进行比较。

        === 比较：它是严格相等比较，不会进行类型转换。只有在两个值的类型相同且值也相等时，才会返回 true，否则返回 false。
     * 
    */
    /**
     * == 
     * null - undefined
     * number - string (string转换成number)
     * boolean - number（boolean转换numbner）
     * Object - string || numer(object转换成基本类型)
     * 他们会隐式转换
     * 通过valueof转换（由后台自动调用）
    */
   /**
    * ===
    * 除了比较值，还会比较类型
   */
    // 类型转换规则
    // 1.比较 undefined 和 null:
    // undefined 与 null 相等，其他情况不相等。

    // 2.布尔值:
    // 布尔值转换为数字。
    // true 转换为 1，false 转换为 0

    // 3..数字与字符串:
    // 如果一个操作数是字符串，另一个操作数是数字，则将字符串转换为数字，再进行比较。
    // 如果转换后相等，则返回 true，否则 false。

    // 4.对象与原始值:
    // 对象在与原始值比较时，会调用对象的 valueOf 方法（如果存在）进行比较。如果 valueOf 返回原始值，则与该值进行比较。
    // 如果 valueOf 返回的结果不是原始值，则调用 toString 方法（如果存在）。
    // 例如：new Date('2024-01-01') == 'Tue Jan 01 2024' 是 true，因为 Date 对象的 toString 方法返回了一个日期字符串。
</script>
</html>